document.addEventListener('DOMContentLoaded', () => {
// Обработка всех форм с классом mail-form
document.querySelectorAll('form.mail-form').forEach(form => {
// Отключаем стандартную валидацию браузера
form.setAttribute('novalidate', true);
// Создаем контейнер для сообщений формы
const messageContainer = document.createElement('div');
messageContainer.className = 'form-message';
form.insertBefore(messageContainer, form.firstChild);
// Обработчик отправки формы
form.addEventListener('submit', async (e) => {
e.preventDefault();
clearFormMessages(form);
// Запускаем кастомную валидацию
const isValid = validateForm(form);
if (isValid) {
await submitForm(form, messageContainer);
}
});
// Живая валидация при изменении полей
form.querySelectorAll('input, textarea, select').forEach(field => {
field.addEventListener('input', () => {
clearFieldError(field);
validateField(field);
});
});
});
// Функция валидации всей формы
function validateForm(form) {
let isValid = true;
form.querySelectorAll('input, textarea, select').forEach(field => {
if (!validateField(field)) {
isValid = false;
}
});
return isValid;
}
// Валидация отдельного поля
function validateField(field) {
const value = field.value.trim();
let isValid = true;
let errorMessage = '';
// Проверка обязательных полей
if (field.hasAttribute('required') && !value) {
errorMessage = field.dataset.errorRequired || 'Câmp obligatoriu.';
isValid = false;
}
// Валидация email
if (isValid && field.type === 'email' && value) {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(value)) {
errorMessage = field.dataset.errorEmail || 'Email incorect';
isValid = false;
}
}
// Валидация телефона
if (isValid && field.type === 'tel' && value) {
const digits = value.replace(/\D/g, '');
if (digits.length < 6) {
errorMessage = field.dataset.errorTel || 'Număr de telefon incorect';
isValid = false;
}
}
// Валидация по pattern
if (isValid && field.pattern && value) {
const regex = new RegExp(field.pattern);
if (!regex.test(value)) {
errorMessage = field.dataset.errorPattern || field.title || 'Format incorect';
isValid = false;
}
}
// Показ ошибки
if (!isValid) {
showFieldError(field, errorMessage);
}
return isValid;
}
// Показать ошибку поля внутри .input-wrap
function showFieldError(field, message) {
// Добавляем класс ошибки к полю
field.classList.add('field-error');
// Находим контейнер .input-wrap
const inputWrap = field.closest('.input-wrap');
// Если контейнер найден, добавляем ошибку туда
if (inputWrap) {
// Удаляем старые ошибки для этого поля
const existingError = inputWrap.querySelector('.error-text');
if (existingError) existingError.remove();
// Создаем элемент ошибки
const errorElement = document.createElement('div');
errorElement.className = 'error-text';
errorElement.textContent = message;
inputWrap.appendChild(errorElement);
} else {
// Если .input-wrap не найден, добавляем после поля (резервный вариант)
const errorElement = document.createElement('div');
errorElement.className = 'error-text';
errorElement.textContent = message;
field.parentNode.insertBefore(errorElement, field.nextSibling);
}
}
// Очистить ошибку поля
function clearFieldError(field) {
// Убираем класс ошибки
field.classList.remove('field-error');
// Находим контейнер .input-wrap
const inputWrap = field.closest('.input-wrap');
if (inputWrap) {
// Удаляем сообщение об ошибке внутри .input-wrap
const errorElement = inputWrap.querySelector('.error-text');
if (errorElement) errorElement.remove();
} else {
// Резервный вариант: удаляем следующий элемент
const errorElement = field.nextElementSibling;
if (errorElement && errorElement.classList.contains('error-text')) {
errorElement.remove();
}
}
}
// Очистить все сообщения формы
function clearFormMessages(form) {
// Очищаем ошибки полей
form.querySelectorAll('.field-error').forEach(field => {
field.classList.remove('field-error');
});
// Удаляем все сообщения об ошибках внутри .input-wrap
form.querySelectorAll('.input-wrap .error-text').forEach(el => el.remove());
// Удаляем сообщения вне .input-wrap (резервные)
form.querySelectorAll('.error-text').forEach(el => el.remove());
// Скрываем глобальное сообщение
const messageContainer = form.querySelector('.form-message');
if (messageContainer) {
messageContainer.textContent = '';
messageContainer.className = 'form-message';
messageContainer.style.display = 'none';
}
}
// Отправка формы
async function submitForm(form, messageContainer) {
const formData = new FormData(form);
const submitButton = form.querySelector('[type="submit"]');
const originalText = submitButton.innerHTML;
// Блокируем кнопку
submitButton.innerHTML = 'Sending...';
submitButton.disabled = true;
try {
const response = await fetch('form.php', {
method: 'POST',
body: formData
});
const result = await response.json();
messageContainer.textContent = result.message || '';
messageContainer.style.display = 'block';
if (result.success) {
messageContainer.classList.add('success');
form.reset();
// Автоскрытие успешного сообщения
setTimeout(() => {
messageContainer.style.display = 'none';
}, 5000);
} else {
messageContainer.classList.add('error');
}
} catch (error) {
messageContainer.textContent = 'Error: ' + error.message;
messageContainer.classList.add('error');
messageContainer.style.display = 'block';
} finally {
// Разблокируем кнопку
submitButton.innerHTML = originalText;
submitButton.disabled = false;
}
}
});
const employees = document.querySelector("#employees")
noUiSlider.create(employees, {
start: 1300,
connect: [true, false],
tooltips: {
to: function(value) {
return Math.trunc(value) + "RON"
}
},
range: {
'min': 1300,
'50%': 15000,
'max': 25000
},
pips: {
mode: 'steps',
filter: function (value, type) {
return type === 0 ? -1 : 1;
},
format: {
to: function (value) {
return value + "RON";
}
}
}
});
var calc_result = document.getElementById('calc_result');
employees.noUiSlider.on('update', function (values, handle) {
calc_result.innerHTML = Math.trunc(values[handle] * 1.60) + "RON";
});
$(document).ready(function() {
$('.burger').click(function(event) {
$(this).toggleClass('active');
$('.header_nav').toggleClass('active');
});
});
//select open
$(document).ready(function() {
const btnOk = document.querySelector('.video_play');
const wrapperVideo = document.getElementById('video');
btnOk.addEventListener('click',function(){
wrapperVideo.play();
$(this).hide();
});
});
//Плавный скрол по секциям
$(document).ready(function() {
$('.header_nav_item,.scroll').click(function(){
var el = $(this).attr('href');
$('html,body').animate({
scrollTop: $(el).offset().top - 100} , 1000);
return false;
});
});
$(document).ready(function() {
//1
time1 = Date.now();
time1_minus = time1 + 500;
time1_minus_time = new Date(time1_minus);
result1 = time1_minus_time.toLocaleTimeString();
$('#item12').html(result1);
//2
time2_minus = time1_minus + 4000;
time2_minus_time = new Date(time2_minus);
result2 = time2_minus_time.toLocaleTimeString();
$('#item11').html(result2);
//3
time3_minus = time2_minus + 4000;
time3_minus_time = new Date(time3_minus);
result3 = time3_minus_time.toLocaleTimeString();
$('#item10').html(result3);
//4
time4_minus = time3_minus + 4000;
time4_minus_time = new Date(time4_minus);
result4 = time4_minus_time.toLocaleTimeString();
$('#item9').html(result4);
//5
time5_minus = time4_minus + 4000;
time5_minus_time = new Date(time5_minus);
result5 = time5_minus_time.toLocaleTimeString();
$('#item8').html(result5);
//6
time6_minus = time5_minus + 4000;
time6_minus_time = new Date(time6_minus);
result6 = time6_minus_time.toLocaleTimeString();
$('#item7').html(result6);
//7
time7_minus = time6_minus + 4000;
time7_minus_time = new Date(time7_minus);
result7 = time7_minus_time.toLocaleTimeString();
$('#item6').html(result7);
//8
time8_minus = time7_minus + 4000;
time8_minus_time = new Date(time8_minus);
result8 = time8_minus_time.toLocaleTimeString();
$('#item5').html(result8);
//9
time9_minus = time8_minus + 4000;
time9_minus_time = new Date(time9_minus);
result9 = time9_minus_time.toLocaleTimeString();
$('#item4').html(result9);
//10
time10_minus = time9_minus + 4000;
time10_minus_time = new Date(time10_minus);
result10 = time10_minus_time.toLocaleTimeString();
$('#item3').html(result10);
//11
time11_minus = time10_minus + 4000;
time11_minus_time = new Date(time11_minus);
result11 = time11_minus_time.toLocaleTimeString();
$('#item2').html(result11);
//12
time12_minus = time11_minus + 4000;
time12_minus_time = new Date(time12_minus);
result12 = time12_minus_time.toLocaleTimeString();
$('#item1').html(result12);
});
$('.feedback_slider').slick({
infinite: true,
slidesToShow: 1,
slidesToScroll: 1,
prevArrow: '',
nextArrow: '',
});
//Плавный скрол по секциям
$(document).ready(function() {
$('.faq_item').click(function(){
$(this).find('.faq_answer').toggle(400);
$(this).toggleClass('active');
});
});
function getTimeRemaining(endtime) {
var t = Date.parse(endtime) - Date.parse(new Date());
var seconds = Math.floor((t / 1000) % 60);
var minutes = Math.floor((t / 1000 / 60) % 60);
var hours = Math.floor((t / (1000 * 60 * 60)) % 24);
var days = Math.floor(t / (1000 * 60 * 60 * 24));
return {
total: t,
days: days,
hours: hours,
minutes: minutes,
seconds: seconds
};
}
function initializeClock(id, endtime) {
var clock = document.getElementById(id);
var daysSpan = clock.querySelector(".days");
var hoursSpan = clock.querySelector(".hours");
var minutesSpan = clock.querySelector(".minutes");
var secondsSpan = clock.querySelector(".seconds");
function updateClock() {
var t = getTimeRemaining(endtime);
if (t.total <= 0) {
document.getElementById("countdown").className = "hidden";
document.getElementById("deadline-message").className = "visible";
clearInterval(timeinterval);
return true;
}
daysSpan.innerHTML = t.days;
hoursSpan.innerHTML = ("0" + t.hours).slice(-2);
minutesSpan.innerHTML = ("0" + t.minutes).slice(-2);
secondsSpan.innerHTML = ("0" + t.seconds).slice(-2);
}
updateClock();
var timeinterval = setInterval(updateClock, 1000);
}
//var deadline = "January 01 2018 00:00:00 GMT+0300"; //for Ukraine
var deadline = new Date(Date.parse(new Date()) + 15 * 999 * 59 * 59); // for endless timer
initializeClock("countdown", deadline);
$(document).mouseleave(function(e){
if (e.clientY < 10) {
$('.popup').show();
}
});
$(document).ready(function() {
$('.popup_item_btn').click(function(){
$('.popup').remove();
$('.quiz').show();
});
});
$(document).ready(function() {
$('.popup_item_close').click(function(){
$('.popup').remove();
});
});
$(document).ready(function() {
$('.quiz_btn').click(function(){
$('.quiz').hide();
$('.modal_form').show();
});
});
$(document).ready(function() {
$('.close').click(function(){
$('.modal_form').hide();
});
});
$(window).scroll(function() {
var the_top = $(document).scrollTop();
cPos = $('#calc').offset().top;
if (the_top > cPos) {
all();
}
else {}
});
function all() {
function item1() {
$('.earn_table_item:last-child').addClass('active');
}
function item2() {
$('.earn_table_item:nth-child(8)').addClass('active');
}
function item3() {
$('.earn_table_item:nth-child(7)').addClass('active');
}
function item4() {
$('.earn_table_item:nth-child(6)').addClass('active');
}
function item5() {
$('.earn_table_item:nth-child(5)').addClass('active');
}
function item6() {
$('.earn_table_item:nth-child(4)').addClass('active');
}
function item7() {
$('.earn_table_item:nth-child(3)').addClass('active');
}
function item8() {
$('.earn_table_item:nth-child(2)').addClass('active');
}
function item9() {
$('.earn_table_item:first-child').addClass('active');
}
setTimeout(item1, 500);
setTimeout(item2, 4500);
setTimeout(item3, 8500);
setTimeout(item4, 12500);
setTimeout(item5, 16500);
setTimeout(item6, 20500);
setTimeout(item7, 24500);
setTimeout(item8, 28500);
setTimeout(item9, 30000);
}